New internal function returning a good step value for the mouse wheel. For
authorSoeren Sandmann <sandmann@daimi.au.dk>
Sun, 29 Feb 2004 18:21:57 +0000 (18:21 +0000)
committerSøren Sandmann Pedersen <ssp@src.gnome.org>
Sun, 29 Feb 2004 18:21:57 +0000 (18:21 +0000)
Sun Feb 29 19:04:33 2004  Soeren Sandmann  <sandmann@daimi.au.dk>

* gtk/gtkrange.c (_gtk_range_get_wheel_delta): New internal
function returning a good step value for the mouse wheel. For
scrollbars, base the step on page_size^(2/3), for other ranges,
use 2 * step_increment.

* gtk/gtkrange.c (gtk_range_scroll_event): Use it here ...

* gtk/gtkscrolledwindow.c (gtk_scrolled_window_scroll_event):
... and here.

* gtk/gtkmenu.c (gtk_menu_leave_notify): Fix a warning.

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtkmenu.c
gtk/gtkrange.c
gtk/gtkrange.h
gtk/gtkscrolledwindow.c

index 5348b00c05925030b01af60fdb0a634b894afb06..7a23521f9d970eb6f5a1bb88d5c69e32ae9d1e14 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+Sun Feb 29 19:04:33 2004  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * gtk/gtkrange.c (_gtk_range_get_wheel_delta): New internal
+       function returning a good step value for the mouse wheel. For
+       scrollbars, base the step on page_size^(2/3), for other ranges,
+       use 2 * step_increment.
+
+       * gtk/gtkrange.c (gtk_range_scroll_event): Use it here ...
+
+       * gtk/gtkscrolledwindow.c (gtk_scrolled_window_scroll_event): 
+       ... and here.
+
+       * gtk/gtkmenu.c (gtk_menu_leave_notify): Fix a warning.
+
 Sun Feb 29 01:51:27 2004  Jonathan Blandford  <jrb@gnome.org>
 
        * gtk/gtkfilechooserembed.c
index 5348b00c05925030b01af60fdb0a634b894afb06..7a23521f9d970eb6f5a1bb88d5c69e32ae9d1e14 100644 (file)
@@ -1,3 +1,17 @@
+Sun Feb 29 19:04:33 2004  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * gtk/gtkrange.c (_gtk_range_get_wheel_delta): New internal
+       function returning a good step value for the mouse wheel. For
+       scrollbars, base the step on page_size^(2/3), for other ranges,
+       use 2 * step_increment.
+
+       * gtk/gtkrange.c (gtk_range_scroll_event): Use it here ...
+
+       * gtk/gtkscrolledwindow.c (gtk_scrolled_window_scroll_event): 
+       ... and here.
+
+       * gtk/gtkmenu.c (gtk_menu_leave_notify): Fix a warning.
+
 Sun Feb 29 01:51:27 2004  Jonathan Blandford  <jrb@gnome.org>
 
        * gtk/gtkfilechooserembed.c
index 5348b00c05925030b01af60fdb0a634b894afb06..7a23521f9d970eb6f5a1bb88d5c69e32ae9d1e14 100644 (file)
@@ -1,3 +1,17 @@
+Sun Feb 29 19:04:33 2004  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * gtk/gtkrange.c (_gtk_range_get_wheel_delta): New internal
+       function returning a good step value for the mouse wheel. For
+       scrollbars, base the step on page_size^(2/3), for other ranges,
+       use 2 * step_increment.
+
+       * gtk/gtkrange.c (gtk_range_scroll_event): Use it here ...
+
+       * gtk/gtkscrolledwindow.c (gtk_scrolled_window_scroll_event): 
+       ... and here.
+
+       * gtk/gtkmenu.c (gtk_menu_leave_notify): Fix a warning.
+
 Sun Feb 29 01:51:27 2004  Jonathan Blandford  <jrb@gnome.org>
 
        * gtk/gtkfilechooserembed.c
index 5348b00c05925030b01af60fdb0a634b894afb06..7a23521f9d970eb6f5a1bb88d5c69e32ae9d1e14 100644 (file)
@@ -1,3 +1,17 @@
+Sun Feb 29 19:04:33 2004  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * gtk/gtkrange.c (_gtk_range_get_wheel_delta): New internal
+       function returning a good step value for the mouse wheel. For
+       scrollbars, base the step on page_size^(2/3), for other ranges,
+       use 2 * step_increment.
+
+       * gtk/gtkrange.c (gtk_range_scroll_event): Use it here ...
+
+       * gtk/gtkscrolledwindow.c (gtk_scrolled_window_scroll_event): 
+       ... and here.
+
+       * gtk/gtkmenu.c (gtk_menu_leave_notify): Fix a warning.
+
 Sun Feb 29 01:51:27 2004  Jonathan Blandford  <jrb@gnome.org>
 
        * gtk/gtkfilechooserembed.c
index 5348b00c05925030b01af60fdb0a634b894afb06..7a23521f9d970eb6f5a1bb88d5c69e32ae9d1e14 100644 (file)
@@ -1,3 +1,17 @@
+Sun Feb 29 19:04:33 2004  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * gtk/gtkrange.c (_gtk_range_get_wheel_delta): New internal
+       function returning a good step value for the mouse wheel. For
+       scrollbars, base the step on page_size^(2/3), for other ranges,
+       use 2 * step_increment.
+
+       * gtk/gtkrange.c (gtk_range_scroll_event): Use it here ...
+
+       * gtk/gtkscrolledwindow.c (gtk_scrolled_window_scroll_event): 
+       ... and here.
+
+       * gtk/gtkmenu.c (gtk_menu_leave_notify): Fix a warning.
+
 Sun Feb 29 01:51:27 2004  Jonathan Blandford  <jrb@gnome.org>
 
        * gtk/gtkfilechooserembed.c
index bd53ad6ec46536c18325aeb1975bf70210af68cb..734f6c3c9dbbd6462ab50b5bf99f7c720749a1d5 100644 (file)
@@ -2880,7 +2880,7 @@ gtk_menu_leave_notify (GtkWidget        *widget,
          gtk_menu_set_submenu_navigation_region (menu, menu_item, event);
          return TRUE;
        }
-      else if (menu_item == menu_shell->active_menu_item)
+      else if (menu_item == GTK_MENU_ITEM (menu_shell->active_menu_item))
        {
          /* We are leaving an active menu item with nonactive submenu.
           * Deselect it so we don't surprise the user with by popping
index d277de8f184d54187493ea4c74b3eac628ca403a..88520c91eb866690ccbd8f47ec1c2891c0bdfd03 100644 (file)
  */
 
 #include <stdio.h>
+#include <math.h>
 #include "gtkintl.h"
 #include "gtkmain.h"
 #include "gtkmarshalers.h"
 #include "gtkrange.h"
 #include "gtkintl.h"
+#include "gtkscrollbar.h"
 
 #define SCROLL_INITIAL_DELAY 250  /* must hold button this long before ... */
 #define SCROLL_LATER_DELAY   100  /* ... it starts repeating at this rate  */
@@ -1364,6 +1366,39 @@ gtk_range_button_release (GtkWidget      *widget,
   return FALSE;
 }
 
+/**
+ * _gtk_range_get_wheel_delta:
+ * @range: a #GtkRange
+ * @direction: A #GdkScrollDirection
+ * 
+ * Returns a good step value for the mouse wheel.
+ * 
+ * Return value: A good step value for the mouse wheel. 
+ * 
+ * Since: 2.4
+ **/
+gdouble
+_gtk_range_get_wheel_delta (GtkRange           *range,
+                           GdkScrollDirection  direction)
+{
+  GtkAdjustment *adj = range->adjustment;
+  gdouble delta;
+
+  if (GTK_IS_SCROLLBAR (range))
+    delta = pow (adj->page_size, 2.0 / 3.0);
+  else
+    delta = adj->step_increment * 2;
+  
+  if (direction == GDK_SCROLL_UP ||
+      direction == GDK_SCROLL_LEFT)
+    delta = - delta;
+  
+  if (range->inverted)
+    delta = - delta;
+
+  return delta;
+}
+      
 static gint
 gtk_range_scroll_event (GtkWidget      *widget,
                        GdkEventScroll *event)
@@ -1373,16 +1408,11 @@ gtk_range_scroll_event (GtkWidget      *widget,
   if (GTK_WIDGET_REALIZED (range))
     {
       GtkAdjustment *adj = GTK_RANGE (range)->adjustment;
-      gdouble increment = ((event->direction == GDK_SCROLL_UP ||
-                           event->direction == GDK_SCROLL_LEFT) ? 
-                          -adj->page_increment / 2: 
-                          adj->page_increment / 2);
-      
-      if (range->inverted)
-       increment = -increment;
-         
-      gtk_range_internal_set_value (range, adj->value + increment);
+      gdouble delta;
 
+      delta = _gtk_range_get_wheel_delta (range, event->direction);
+      gtk_range_internal_set_value (range, adj->value + delta);
+      
       /* Policy DELAYED makes sense with scroll events,
        * but DISCONTINUOUS doesn't, so we update immediately
        * for DISCONTINUOUS
index 02ffdad49c84c8b621cf61744b65843a9f508295..9f3758ea8c46460e4e8a40f841f912388a96881d 100644 (file)
@@ -149,6 +149,8 @@ void           gtk_range_set_value         (GtkRange      *range,
                                             gdouble        value);
 gdouble        gtk_range_get_value         (GtkRange      *range);
 
+gdouble              _gtk_range_get_wheel_delta   (GtkRange           *range,
+                                           GdkScrollDirection  direction);
 
 #ifdef __cplusplus
 }
index 067e0c1fb247f52b9834753e010f058a1270e8ea..6b42c1920906750185c1e96ddf51ff737901e3d3 100644 (file)
@@ -24,6 +24,7 @@
  * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
  */
 
+#include <math.h>
 #include <gdk/gdkkeysyms.h>
 #include "gtkbindings.h"
 #include "gtkmarshalers.h"
@@ -1226,14 +1227,12 @@ gtk_scrolled_window_scroll_event (GtkWidget *widget,
   if (range && GTK_WIDGET_VISIBLE (range))
     {
       GtkAdjustment *adj = GTK_RANGE (range)->adjustment;
-      gdouble new_value;
+      gdouble delta, new_value;
 
-      if (event->direction == GDK_SCROLL_UP || event->direction == GDK_SCROLL_LEFT)
-       new_value = adj->value - adj->page_increment / 2;
-      else
-       new_value = adj->value + adj->page_increment / 2;
+      delta = _gtk_range_get_wheel_delta (GTK_RANGE (range), event->direction);
 
-      new_value = CLAMP (new_value, adj->lower, adj->upper - adj->page_size);
+      new_value = CLAMP (adj->value + delta, adj->lower, adj->upper - adj->page_size);
+      
       gtk_adjustment_set_value (adj, new_value);
 
       return TRUE;